javascript是单线程程序,所有代码都是单线程执行。导致javascript的网络请求都是异步执行,异步执行可以通过回调函数实现:
setTimeout(callback,1000);
function callback(){
console.log('----callback')
//1秒钟才能打印,回调函数处理异步执行的
};
但是es6推出一种新的方法new Promise()==>对象用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。
new Promise( function(resolve, reject) {...});resolve 表示成功的状态 reject 表示失败的状态
Promise的方法有:
1.Promise.all([]).then(e=>e).catch(e=>e) ==>数组中所有传入状态完成才执行
2.Promise.race([]).then(e=>e).catch(e=>e) ==>数组中又一个传入的状态完成就执行
3.Promise.resolve({}) ==>返回一个成功的状态
4.Promise.reject({}) ==>返回一个失败的状态
let a=new Promise((resolve,reject)=>{
resolve(1)
//或reject()
});
a.then(e=>{ // resolve 返回的结果
console.log(e) //1
}).catch(e=>{ //reject 返回的结果
console.log(e)
});
如果我们有一个需求是需要所有3个接口的数据都返回了然后再进行操作,那么promise.all就可以解决,比如下面例子:
let b1=new Promise((resolve,reject)=>{
resolve('b1')
});
let b2=new Promise((resolve,reject)=>{
resolve('b2')
})
let b3=new Promise((resolve,reject)=>{
resolve('b3')
});
let b4=Promise.resolve('成功') //调用一个成功的状态
Promise.all([b1,b2,b3,b4]).then(value=>{
console.log(value) // 'b1', 'b2', 'b3' ]
})
let b5=Promise.reject('失败') //调用一个失败的状态
Promise.all([b1,b5]).then(value=>{
console.log(value)
}).catch(e=>{
console.log(e,'------失败') //失败
})
如果我们有一个需求是3个接口中只要有一个完成了接口请求即执行,Promise.race([])
var promise1 = new Promise(function(resolve, reject) {
setTimeout(resolve, 50, 'one');
});
var promise2 = new Promise(function(resolve, reject) {
setTimeout(resolve, 100, 'two');
});
Promise.race([promise1, promise2]).then(value=>{
console.log(value); //one
}).catch(e=>{
console.log(e)
})
//promise1或者promise2谁先执行完就执行就获取先执行的值
每天进步一点,希望大家喜欢,也希望喜欢的朋友点个赞或收藏,后续继续更新...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。